using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using NEX_Datos;
using System.Data;

namespace NEXServicio
{
    public class ServicioComentario : ServicioPadre
    {
        #region Contantes

        public const String DataTableName = "Comentario";

        #endregion

        #region Metodos Privados

        private static DataSet ListarPrivado(int? idComentario, int? idLibro, DateTime? fechaDesde, DateTime? fechaHasta,bool limitar)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "ComentarioTraer";

                SetearConNulo("p_idComentario", cmd, MySqlDbType.Int32, idComentario);
                SetearConNulo("p_idLibro", cmd, MySqlDbType.Int32, idLibro);
                SetearConNulo("p_fechaDesde", cmd, MySqlDbType.Date, fechaDesde);
                SetearConNulo("p_fechaHasta", cmd, MySqlDbType.Date, fechaHasta);
                SetearConNulo("p_Limitar", cmd, MySqlDbType.Bit, limitar);

                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                    cmd.Connection.Close();
                }
            }
            ds.Tables[0].TableName = ServicioComentario.DataTableName;
            return ds;
        }

        #endregion

        #region Metodos Publicos

        public static DataSet Listar(Int32 idLibro,DateTime? fechaDesde, DateTime? fechaHasta,bool limitar)
        {
            return ServicioComentario.ListarPrivado(null, idLibro, fechaDesde, fechaHasta, limitar);
        }
        public static DataSet Listar(int idLibro, bool limitar)
        {
            return ServicioComentario.ListarPrivado(null, idLibro, null, null,limitar); ;
        }
        public static DataSet Obtener(int idComentario)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "ComentarioTraer";

                SetearConNulo("p_idComentario", cmd, MySqlDbType.Int32,idComentario);
                SeteaValorNulo("p_idLibro", cmd, MySqlDbType.Int32);
                SeteaValorNulo("p_fechaDesde", cmd, MySqlDbType.Date);
                SeteaValorNulo("p_fechaHasta", cmd, MySqlDbType.Date);

                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                }
            }
            ds.Tables[0].TableName = ServicioComentario.DataTableName;

            return ds;
        }

        #endregion

        #region Metodos para Salvar

        public static int Salvar(Transaccion transaccion, int idComentario, string descripcion, DateTime? fecha, int? idComentarioRta, int idUsuario, int idLibro, bool esAlta)
        {
            if (transaccion == null)
            {
                throw new ArgumentNullException("transaccion");
            }
            using (MySqlCommand cmd = transaccion.SqlCommandObtener())
            {
                cmd.CommandText = "ComentarioSalvar";

                cmd.Parameters.Add("p_idComenario", MySqlDbType.Int32).Value = idComentario;
                cmd.Parameters["p_idComenario"].Direction = ParameterDirection.InputOutput;
                cmd.Parameters.Add("p_descripcion", MySqlDbType.Text).Value = descripcion;
                cmd.Parameters.Add("p_fecha", MySqlDbType.Date).Value = fecha;
                cmd.Parameters.Add("p_idComentarioRta", MySqlDbType.Int32).Value = idComentarioRta;
                cmd.Parameters.Add("p_idUsuario", MySqlDbType.Int32).Value = idUsuario;
                cmd.Parameters.Add("p_idLibro", MySqlDbType.Int32).Value = idLibro;
                cmd.Parameters.Add("p_esAlta", MySqlDbType.Bit).Value = esAlta;
                
                cmd.ExecuteNonQuery();
                return (Int32)cmd.Parameters["p_idComenario"].Value;
            }
        }

        #endregion


    }
}
